package com.golden.procedure.service;

import java.util.Date;

import com.golden.procedure.domain.WorkSchedulingSettingDO;
import com.golden.procedure.domain.WorkSiteSchedulingDO;
import com.golden.procedure.query.SchedulingQueryDO;
import com.golden.procedure.result.ResultDO;

/**
 * 摄控设置、摄控日历等接口服务 <b>Description:</b><br>
 * 
 * @author Reading.Reagan</a>
 * @version 1.0
 * @Note <b>ProjectName:</b> procedure-api <br>
 *       <b>PackageName:</b> com.golden.procedure.service <br>
 *       <b>ClassName:</b> IWorkSiteSchedulingService <br>
 *       <b>Date:</b> 2018年9月25日 下午2:37:43
 */
public interface IWorkSiteSchedulingService {

	/**
	 * 创建摄控设置 <b>Description:新增日程表、工位分组表、席位表数据</b><br>
	 * 
	 * @param domain
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午4:37:11 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO add(WorkSchedulingSettingDO domain);

	/**
	 * 保存摄控设置 <b>Description:修改日程表数据状态</b><br>
	 * 
	 * @param domain
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午4:36:54 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO saveSetting(WorkSchedulingSettingDO domain);

	/**
	 * 清除某天/某段时间的摄控设置，删除所有工位组 <b>Description:判断该时间段内是否已有工单：
	 * 无则删除日程、工位及席位数据；有则不允许删除</b><br>
	 * 
	 * @param ids
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午2:55:03 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO deleteSetting(WorkSchedulingSettingDO domain);

	/**
	 * 查询某一天或某个时间段内的摄控设置 <b>Description:时间段内查询某一天的摄控设置</b><br>
	 * 
	 * @param query
	 * @return ResultDO
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午4:57:00 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO query(SchedulingQueryDO query);

	/**
	 * 查询某个景点的最新摄控日期 <b>Description:</b><br>
	 * 
	 * @param siteID
	 * @return Date
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午4:57:26 <br>
	 *       <b>Version:</b> 1.0
	 */
	public Date getLatestSchedulingDate(Integer siteID);

	/**
	 * 查询摄控日历 <b>Description:</b><br>
	 * 
	 * @param siteID
	 * @return Date
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午5:50:51 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO schedulingCalendar(SchedulingQueryDO query);

	/**
	 * 设置/取消休息日 <b>Description:设置休息日：若当天已有工单预约，则不允许修改； 若无，则将删除当天的工位分组及席位；
	 * 取消休息日，不恢复设置，需要重新创建摄控设置</b><br>
	 * 
	 * @param siteID
	 * @return Date
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月17日 下午5:50:51 <br>
	 *       <b>Version:</b> 1.0
	 */
	public ResultDO setDayoff(WorkSiteSchedulingDO domain);

	/**
	 * 统计工位组数 <b>Description:统计某一天的工位组数</b><br>
	 * 
	 * @param data
	 * @return Integer
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月18日 上午11:19:40 <br>
	 *       <b>Version:</b> 1.0
	 */
	public Integer countSeatGroup(WorkSiteSchedulingDO domain);

	/**
	 * 统计席位 <b>Description:统计某一天的席位数</b><br>
	 * 
	 * @param domain
	 * @param status
	 *            席位状态
	 * @return Integer
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月18日 上午11:19:40 <br>
	 *       <b>Version:</b> 1.0
	 */
	public Integer countSeatNum(WorkSiteSchedulingDO domain, Integer status);

	/**
	 * 统计已拍摄数量 <b>Description:统计某用户某一天的已拍摄数量</b><br>
	 * 
	 * @param data
	 * @param status
	 *            席位状态
	 * @return Integer
	 * @Note <b>Author:</b> Reading.Reagan <br>
	 *       <b>Date:</b> 2018年9月18日 上午11:19:40 <br>
	 *       <b>Version:</b> 1.0
	 */
	public Integer countServiceNum(Integer siteID, Date date, Integer employeeID);

}
